{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ffe4a0f6-6f41-47fe-856e-cff892d63b6e",
   "metadata": {},
   "source": [
    "# SPU Inside"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f93887c6-3641-479c-a58e-b8e2f57a9254",
   "metadata": {},
   "source": [
    "SPU is a virtual device backed by an MPC engine, which provides an *arithmetic black box* abstraction to front-end users. Just like other *black boxes*, it's not easy to understand what happened inside it.\n",
    "\n",
    "For this reason, SPU provides some features to show what happened inside it, this document demonstrates these features. \n",
    "\n",
    "## Simulation\n",
    "\n",
    "As the name suggests, *multi-party computation* is born to be distributed system with multiple participants, which makes it harder to setup, debug and inspect. So SPU provides a *simulation module* that uses threads to simulate multi-parties in a single process.  All parties acts exactly the same as in production environment, so we can use it as a playground to inspect the internals of SPU.\n",
    "\n",
    "To use the simulation module, we can simple do"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "0ad5b8d2-42b1-4a52-bce7-029ad140b092",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.072366Z",
     "start_time": "2023-07-10T08:43:03.485732Z"
    }
   },
   "outputs": [],
   "source": [
    "import spu\n",
    "import jax.numpy as jnp\n",
    "import numpy as np\n",
    "\n",
    "# import spu simulation module\n",
    "import spu.utils.simulation as pps"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7f6c030-f1d8-4c7b-a854-05037a867c4c",
   "metadata": {},
   "source": [
    "Now we can create SPU simulator and run program on it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "c462ad19-fa12-46b8-8461-3e8e4d736820",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.161796700Z",
     "start_time": "2023-07-10T08:43:04.098006800Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 6.  8.]\n",
      " [10. 12.]]\n"
     ]
    }
   ],
   "source": [
    "# create a simulator with ABY3 x Ring64 protocol.\n",
    "protocol = spu.ProtocolKind.ABY3\n",
    "field = spu.FieldType.FM64\n",
    "simulator = pps.Simulator.simple(3, protocol, field)\n",
    "\n",
    "# decorate a jnp function to a simulated function\n",
    "spu_add = pps.sim_jax(simulator, jnp.add)\n",
    "\n",
    "# now we can call spu_fn like normal jnp fn.\n",
    "x = np.array([[1.0, 2.0], [3.0, 4.0]])\n",
    "y = np.array([[5.0, 6.0], [7.0, 8.0]])\n",
    "\n",
    "# the function is simulated on SPU VM, which use 3 threads to simulate different parties.\n",
    "# the actual progress is exactly the same as real distributed version.\n",
    "z = spu_add(x, y)\n",
    "\n",
    "print(z)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af286f9b-76de-40c6-a8bd-562e25056a2b",
   "metadata": {},
   "source": [
    "In the above code.\n",
    "- First, we create an SPU simulator backed by *ABY3* protocol with *FM64* field.\n",
    "- Then we decorates a jax function `jax.add` to make it a SPU simulated function.\n",
    "- Then we can use the simulated function just like normal python functions.\n",
    "\n",
    "As the result suggests, it behaves like a python function, we can also print the compiled pphlo program with"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0e72f4d7-ce6b-4be0-952a-5abd28e94596",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.162837100Z",
     "start_time": "2023-07-10T08:43:04.143799300Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "module @xla_computation_add attributes {mhlo.cross_program_prefetches = [], mhlo.is_dynamic = false, mhlo.use_auto_spmd_partitioning = false} {\n",
      "  func.func @main(%arg0: tensor<2x2x!pphlo.secret<f32>>, %arg1: tensor<2x2x!pphlo.secret<f32>>) -> tensor<2x2x!pphlo.secret<f32>> {\n",
      "    %0 = pphlo.add %arg0, %arg1 : tensor<2x2x!pphlo.secret<f32>>\n",
      "    return %0 : tensor<2x2x!pphlo.secret<f32>>\n",
      "  }\n",
      "}\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(spu_add.pphlo)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "758889fd-930b-4ee0-a3c3-aba55f634840",
   "metadata": {},
   "source": [
    "The above code is a pphlo dialect in [MLIR](https://mlir.llvm.org/) format, which defines a `main` function that accepts two arguments and returns the sum as result.\n",
    "\n",
    "Besides single `jax.numpy` op, we can simulate any jax function on SPU, i.e."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e39965e9-763e-4e8c-a01c-c277ac82a2cf",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.175416Z",
     "start_time": "2023-07-10T08:43:04.161796700Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "module @xla_computation_sigmoid attributes {mhlo.cross_program_prefetches = [], mhlo.is_dynamic = false, mhlo.use_auto_spmd_partitioning = false} {\n",
      "  func.func @main(%arg0: tensor<2x2x!pphlo.secret<f32>>) -> tensor<2x2x!pphlo.secret<f32>> {\n",
      "    %0 = pphlo.constant dense<1.000000e+00> : tensor<2x2xf32>\n",
      "    %1 = pphlo.negate %arg0 : tensor<2x2x!pphlo.secret<f32>>\n",
      "    %2 = pphlo.exponential %1 : tensor<2x2x!pphlo.secret<f32>>\n",
      "    pphlo.free %1 : tensor<2x2x!pphlo.secret<f32>>\n",
      "    %3 = pphlo.add %2, %0 : (tensor<2x2x!pphlo.secret<f32>>, tensor<2x2xf32>) -> tensor<2x2x!pphlo.secret<f32>>\n",
      "    pphlo.free %2 : tensor<2x2x!pphlo.secret<f32>>\n",
      "    %4 = pphlo.divide %0, %3 : (tensor<2x2xf32>, tensor<2x2x!pphlo.secret<f32>>) -> tensor<2x2x!pphlo.secret<f32>>\n",
      "    pphlo.free %3 : tensor<2x2x!pphlo.secret<f32>>\n",
      "    pphlo.free %0 : tensor<2x2xf32>\n",
      "    return %4 : tensor<2x2x!pphlo.secret<f32>>\n",
      "  }\n",
      "}\n",
      "\n"
     ]
    }
   ],
   "source": [
    "def sigmoid(x):\n",
    "    return 1 / (1 + jnp.exp(-x))\n",
    "\n",
    "\n",
    "spu_sigmoid = pps.sim_jax(simulator, sigmoid)\n",
    "spu_sigmoid(x)\n",
    "\n",
    "print(spu_sigmoid.pphlo)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "beaf5df8-be1f-4aad-89c7-37ac71009985",
   "metadata": {},
   "source": [
    "The above code is `spu function` which is composed of spu builtin ops.\n",
    "\n",
    "Note: since spu use [JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation) compilation, so we have to execute the function before printing the compiled bytecode."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e21cbc2d-525c-4026-8477-2455e4937d77",
   "metadata": {},
   "source": [
    "## Profling\n",
    "\n",
    "Besides simple simulation, we can profile the simulated program, although the profiling result could NOT be \n",
    "used as a reference of SPU perf, it still gives some information of what happened.\n",
    "\n",
    "To use profiling, we have enabled some feature flags."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a073c67c-9a29-41d8-b5e9-33d286ab6021",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.243377Z",
     "start_time": "2023-07-10T08:43:04.179378200Z"
    }
   },
   "outputs": [],
   "source": [
    "config = spu.RuntimeConfig(protocol=protocol, field=field)\n",
    "config.enable_pphlo_profile = True\n",
    "simulator = pps.Simulator(3, config)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca5d2117-b5a2-4902-a724-6e51372016c2",
   "metadata": {},
   "source": [
    "`enable_pphlo_profile` tells SPU runtime to print information about pphlo, now, let's run the function on this new runtime."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "46826fca-6ded-4405-9a3c-81d8d74b4714",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.243377Z",
     "start_time": "2023-07-10T08:43:04.224377600Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2024-01-30 13:42:21.817] [info] [api.cc:158] [Profiling] SPU execution sigmoid completed, input processing took 3.41e-07s, execution took 0.001975432s, output processing took 5.21e-07s, total time 0.001976294s.\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:191] HLO profiling: total time 0.001726132\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:194] - pphlo.add, executed 1 times, duration 8.295e-06s, send bytes 0\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:194] - pphlo.constant, executed 1 times, duration 6.723e-06s, send bytes 0\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:194] - pphlo.divide, executed 1 times, duration 0.00124213s, send bytes 2496\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:194] - pphlo.exponential, executed 1 times, duration 0.000455869s, send bytes 1152\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:194] - pphlo.free, executed 4 times, duration 1.353e-06s, send bytes 0\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:194] - pphlo.negate, executed 1 times, duration 1.1762e-05s, send bytes 0\n",
      "[2024-01-30 13:42:21.817] [info] [api.cc:204] Link details: total send bytes 3648, send actions 90\n"
     ]
    }
   ],
   "source": [
    "spu_sigmoid = pps.sim_jax(simulator, sigmoid)\n",
    "z = spu_sigmoid(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15ceca0a-737f-42e8-b46c-751e788e62bd",
   "metadata": {},
   "source": [
    "The above log tells the total execution time and the detailed statistics of each builtin function.\n",
    "\n",
    "Besides the `enable_pphlo_profile` feature flag, SPU has other flags like `enable_hal_profile` to dump runtime information in different levels of instructions.\n",
    "\n",
    "## Tracing\n",
    "\n",
    "*Profiling* can only tell the statistics of SPU instructions, it's still hard to understand what happened inside it.\n",
    "*Tracing* is a feature that used to print verbose `call stack`, which helps to understand/inspect what exactly happened.\n",
    "\n",
    "To enable tracing features, just set `enable_action_trace` in the runtime config."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "918f3728-11f7-4a19-b49e-ac9e16c87955",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.243377Z",
     "start_time": "2023-07-10T08:43:04.225377200Z"
    }
   },
   "outputs": [],
   "source": [
    "config = spu.RuntimeConfig(protocol=protocol, field=field)\n",
    "config.enable_action_trace = True\n",
    "simulator = pps.Simulator(3, config)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1767cb2-fb8c-4f89-83fe-91c332aef1cc",
   "metadata": {},
   "source": [
    "Now, let's run another function on this `tracing enabled` simulator."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0837177f-6406-454a-ac9e-780e4d4cd8db",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.307425100Z",
     "start_time": "2023-07-10T08:43:04.225377200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2024-01-30 13:42:21.857] [TR] [B] hlo.pphlo.multiply()\n",
      "[2024-01-30 13:42:21.857] [TR] [B]   hal.mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]     hal.dtype_cast(Value<2x2xSF32,s=2,1>, F32)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]     hal.dtype_cast(Value<2x2xSF32,s=2,1>, F32)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]     hal.dtype_cast(Value<2x2xSF32,s=2,1>, F32)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]     hal.dtype_cast(Value<2x2xSF32,s=2,1>, F32)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]     hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]       hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]         hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]           mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]             mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]             mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]           mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]         hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]       hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]       hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]         hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]           mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.857] [TR] [B]             mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]             mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]           mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]         hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]       hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]     hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [E]   hal.mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.857] [TR] [E] hlo.pphlo.multiply()\n"
     ]
    }
   ],
   "source": [
    "spu_mul = pps.sim_jax(simulator, jnp.multiply)\n",
    "z = spu_mul(x, y)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "b39bc0e3-ba47-4cad-8e49-ad397f289f26",
   "metadata": {},
   "source": [
    "At the first glance, the trace log is a bit of frustrating, so it worth a little while to explain it.\n",
    "\n",
    "At the very begining, is the entry point of `multiply` function.\n",
    "\n",
    "Each line follows the format as below:\n",
    "```\n",
    "[timestamp] [TR] [B/E] module.op(value_type...)\n",
    "```\n",
    "\n",
    "For example, the second line `[timestamp] [TR] [B]   hal.mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)` means:\n",
    "- this is a tracing log indicated by `[TR]`\n",
    "- the function begins/ends `[B/E]`\n",
    "- the module is `hal`\n",
    "- the operator is `mul`\n",
    "- the two args are both `Value<2x2xSFXP,s=2,1>`\n",
    "\n",
    "Note, `hlo` is short for `High Level Operations`, `hal` is short for `Hardware Abstraction Layer`, `mpc` is short for `Multi-Party Computation`.\n",
    "\n",
    "The `Value<2x2xSFXP,s=2,1>` means it's a **S**ecret **F**i**X**ed **P**ointed tensor with shape(**2x2**) and strides(**2,1**). \n",
    "\n",
    "1. the runtime dispatches the function according parameters datatype (in this case *fxp*), then calls the corresponding fixed point handle function `hal.f_mul`, the prefix `f_` means its for fixed point.\n",
    "2. the runtime dispatches `hal.f_mul` to the untyped version `hal._mul` which operates on `rings`.\n",
    "3. the runtime dispatches `hal._mul` according to the *visibility* type, since both parameters are **secret**, so `hal._mul_ss` is called, the postfix `_ss` indicates that it operates on two secrets.\n",
    "\n",
    "Then the function `hal._mul_ss` is dispatched to the MPC layer, the signature becomes more complicated.\n",
    "```\n",
    "mpc.mul_ss(ArrayRef<4xaby3.AShr<FM64>>,ArrayRef<4xaby3.AShr<FM64>>)\n",
    "```\n",
    "The signature of this operation is the same as above, `mpc.mul_ss` indicates the module is `mpc` and the operation is `mul_ss`.\n",
    "\n",
    "The type `ArrayRef<4xaby3.AShr<FM64>>` has two notable differences:\n",
    "1. unlike hal ops, mpc ops operates on 1D-array instead of tensor, which makes it a more standard SIMD instruction.\n",
    "2. the type `aby3.AShr<FM64>` is protocol-dependent, in this case, it's an *ABY3* arithmetic share in FM64.\n",
    "\n",
    "Finally, it's dispatched to `mpc.mul_aa`, the postfix `_aa` indicates both parameters are arithmetic shares, then the ABY3 share addition protocol is performed.\n",
    "\n",
    "But `f_mul` could not be done with ring multiplication only, we have to `truncate` the result to make the fixed point legal, in the following lines, `hal._trunc` is called and finally dispatched to `mpc.trunc_a` protocol."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f80f56e-1e1d-49fc-866d-e91faed5b10e",
   "metadata": {},
   "source": [
    "The above example is pretty straight forward, now let's make it harder.\n",
    "\n",
    "Fixed point reciprocal is done with [Goldschmidt](https://en.wikipedia.org/wiki/Division_algorithm#Goldschmidt_division) approximation algorithm, the algorithm itself is not that simple, and when it's executed on MPC, things become more complicated.\n",
    "\n",
    "It takes a lot of effort to understand how it works, let's directly see the tracing result."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2bddac60-6e07-459b-8d26-6d77efdfb3d5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:04.323374900Z",
     "start_time": "2023-07-10T08:43:04.265377300Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2024-01-30 13:42:21.880] [TR] [B] hlo.pphlo.constant()\n",
      "[2024-01-30 13:42:21.880] [TR] [B]   hal.constant(PtBufferView<0x7f7d24026028,xPT_F32,>, F32, )\n",
      "[2024-01-30 13:42:21.880] [TR] [B]     hal.make_pub2k(PtBufferView<0x7f7d24026028,xPT_F32,>)\n",
      "[2024-01-30 13:42:21.880] [TR] [E]     hal.make_pub2k(PtBufferView<0x7f7d24026028,xPT_F32,>)\n",
      "[2024-01-30 13:42:21.880] [TR] [E]   hal.constant(PtBufferView<0x7f7d24026028,xPT_F32,>, F32, )\n",
      "[2024-01-30 13:42:21.880] [TR] [B]   hal.broadcast_to(Value<xPF32,s=>, 2x2)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]     mpc.broadcast(Value<xPF32,s=>, 2x2, )\n",
      "[2024-01-30 13:42:21.880] [TR] [B]       mpc.broadcast(Value<xPF32,s=>, 2x2, )\n",
      "[2024-01-30 13:42:21.880] [TR] [E]       mpc.broadcast(Value<xPF32,s=>, 2x2, )\n",
      "[2024-01-30 13:42:21.880] [TR] [E]     mpc.broadcast(Value<xPF32,s=>, 2x2, )\n",
      "[2024-01-30 13:42:21.880] [TR] [E]   hal.broadcast_to(Value<xPF32,s=>, 2x2)\n",
      "[2024-01-30 13:42:21.880] [TR] [E] hlo.pphlo.constant()\n",
      "[2024-01-30 13:42:21.880] [TR] [B] hlo.pphlo.divide()\n",
      "[2024-01-30 13:42:21.880] [TR] [B]   hal.div(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]     hal.dtype_cast(Value<2x2xPF32,s=0,0>, F32)\n",
      "[2024-01-30 13:42:21.880] [TR] [E]     hal.dtype_cast(Value<2x2xPF32,s=0,0>, F32)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]     hal.dtype_cast(Value<2x2xSF32,s=2,1>, F32)\n",
      "[2024-01-30 13:42:21.880] [TR] [E]     hal.dtype_cast(Value<2x2xSF32,s=2,1>, F32)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]     hal.f_div(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]       hal.div_goldschmidt(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]         hal._msb(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]           hal._msb_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]             mpc.msb_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.880] [TR] [B]               mpc.msb_a2b(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.bitdeintl_b(Value<2x2xS*,s=2,1>, 0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 63)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 63)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.msb_a2b(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             mpc.msb_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._msb_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]         hal._msb(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]         hal._make_p(0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           mpc.make_p(0, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           mpc.make_p(0, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]         hal._make_p(0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]         hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.b2a(Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.b2a(Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]         hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]         hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._make_p(1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._make_p(1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]         hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]         hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                   mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                   mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                 mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]               mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]         hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]         hal._prefix_or(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._make_p(0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             mpc.make_p(0, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]             mpc.make_p(0, 2x2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]           hal._make_p(0)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]           hal._xor(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]             hal._xor_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]               mpc.xor_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                 mpc.a2b(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                   mpc.add_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.881] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.881] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                   mpc.add_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.a2b(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._rshift_s(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_s(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.rshift_b(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.rshift_b(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_s(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._rshift_s(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift(Value<2x2xSF32,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._and(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._and(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._rshift_s(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._rshift_s(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._rshift_s(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._rshift_s(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._rshift_s(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._rshift_s(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._rshift_s(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._rshift_s(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._rshift_s(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.rshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_s(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._rshift_s(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal._prefix_or(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal._rshift(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._rshift_s(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             mpc.rshift_s(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.rshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.rshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             mpc.rshift_s(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._rshift_s(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal._rshift(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             mpc.xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal._bitrev(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._bitrev_s(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             mpc.bitrev_s(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.bitrev_b(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.bitrev_b(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             mpc.bitrev_s(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._bitrev_s(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal._bitrev(Value<2x2xS*,s=2,1>, 0, 36)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.b2a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                   mpc.add_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                   mpc.add_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.b2a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal._make_p(2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           mpc.make_p(2, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           mpc.make_p(2, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal._make_p(2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal.constant(PtBufferView<0x7f7d377f9d70,xPT_F32,>, F32, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal.make_pub2k(PtBufferView<0x7f7d377f9d70,xPT_F32,>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal.make_pub2k(PtBufferView<0x7f7d377f9d70,xPT_F32,>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal.constant(PtBufferView<0x7f7d377f9d70,xPT_F32,>, F32, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal._mul(Value<2x2xP*,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             mpc.mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.mul_ap(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.mul_ap(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             mpc.mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal._mul(Value<2x2xP*,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal.f_sub(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal.f_negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal.f_negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal.f_add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                   mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                   mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal.f_add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal.f_sub(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal.constant(PtBufferView<0x7f7d377f9d70,xPT_F32,>, F32, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal.make_pub2k(PtBufferView<0x7f7d377f9d70,xPT_F32,>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal.make_pub2k(PtBufferView<0x7f7d377f9d70,xPT_F32,>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]         hal.constant(PtBufferView<0x7f7d377f9d70,xPT_F32,>, F32, 2x2)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.882] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_sub(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal.f_negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal.f_negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal.f_add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal.f_add(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_sub(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_square(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_square(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.add_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._add_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_add(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.mul_aa(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Positive)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.mul_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.mul_ap(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._mul_sp(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xPF32,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.b2a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.add_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 2)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 4)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 8)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 16)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 32)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.and_bb(Value<8xS*,s=1>, Value<8xS*,s=1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.lshift_b(Value<2x2xS*,s=2,1>, 1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.xor_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.add_bb(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.b2a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._mul_ss(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.trunc_a(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._trunc_s(Value<2x2xS*,s=2,1>, 18, Unknown)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._trunc(Value<2x2xS*,s=2,1>, 18)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal.f_mul(Value<2x2xSF32,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._make_p(1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._make_p(1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]         hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.make_p(1, 2x2)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._make_p(1)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.not_a(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 hal._not_s(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._not(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                     mpc.add_ap(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._negate(Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                   mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                   mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.mul_aa(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]             hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]               mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [B]                 mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]                 mpc.add_aa(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]               mpc.add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]             hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]           hal._add(Value<2x2xSF32,s=2,1>, Value<2x2xS*,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]         hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]       hal.div_goldschmidt(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]     hal.f_div(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E]   hal.div(Value<2x2xPF32,s=0,0>, Value<2x2xSF32,s=2,1>)\n",
      "[2024-01-30 13:42:21.883] [TR] [E] hlo.pphlo.divide()\n",
      "[2024-01-30 13:42:21.883] [TR] [B] hlo.pphlo.free()\n",
      "[2024-01-30 13:42:21.883] [TR] [E] hlo.pphlo.free()\n"
     ]
    }
   ],
   "source": [
    "spu_reciprocal = pps.sim_jax(simulator, jnp.reciprocal)\n",
    "z = spu_reciprocal(x)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "9a3fdc33-ad15-4165-a86d-1dda143465c0",
   "metadata": {},
   "source": [
    "Surprise, it's really a lot of ops!\n",
    "\n",
    "Yes, that's why MPC is still relatively slow and why SPU wants to optimize it :P\n",
    "\n",
    "The `reciprocal` is still a relative simple operator, you can try more complicated op like `convolution`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d28fb8c7-5ca5-44e7-a795-1edd042a6f1e",
   "metadata": {},
   "source": [
    "## Misc\n",
    "\n",
    "Simulation could be used to inspect other parts of SPU, i.e. the *fixed point arithmetic* accuracy.\n",
    "\n",
    "As the above example indicates, non-linear functions like `reciprocal` and `exp` are approximated with some numeric methods, so the result is not as accurate as floating point arithmetic.\n",
    "\n",
    "For example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "132ec47e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:06.470145200Z",
     "start_time": "2023-07-10T08:43:04.314378400Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: matplotlib in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (3.8.2)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (1.2.0)\n",
      "Requirement already satisfied: cycler>=0.10 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (0.12.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (4.46.0)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (1.4.5)\n",
      "Requirement already satisfied: numpy<2,>=1.21 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (1.26.3)\n",
      "Requirement already satisfied: packaging>=20.0 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (23.2)\n",
      "Requirement already satisfied: pillow>=8 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (10.1.0)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (3.1.1)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (2.8.2)\n",
      "Requirement already satisfied: importlib-resources>=3.2.0 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from matplotlib) (6.1.1)\n",
      "Requirement already satisfied: zipp>=3.1.0 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib) (3.17.0)\n",
      "Requirement already satisfied: six>=1.5 in /home/zhengyancheng.zyc/miniconda3/envs/spu3.9/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "9d4b6845-f129-490a-8be5-3e86ec5430a6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-07-10T08:43:07.419039Z",
     "start_time": "2023-07-10T08:43:06.477463300Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKOElEQVR4nO3deXxU1f3/8ddkmyRkgQBJWEIIBFlklTVYARVFRCTVKqW2gFVaBayKrS1WBWlrqhTBWgT9VsHlhyIq0FKVIjWgEhBQFFAQNBCWLGxZIQsz9/fHMENGEsh+Z3k/H4955M6dc+98JjHmzT3n3GMxDMNARERExEcEmF2AiIiISENSuBERERGfonAjIiIiPkXhRkRERHyKwo2IiIj4FIUbERER8SkKNyIiIuJTFG5ERETEpyjciIiIiE9RuBGRJtWxY0cmT57coOecPHkyHTt2dNtnsViYPXu26/ns2bOxWCwcP368Qd97xIgRjBgxokHPKSL1o3Aj4iOWLl2KxWLBYrHwySefXPC6YRgkJCRgsVi46aab6vQeTz75JKtWrapnpXVz9OhRZs+ezY4dO0x5fxHxHgo3Ij4mNDSUZcuWXbB/w4YNHD58GKvVWudzmx1unnjiiRqHmzNnzvDoo482blEi4pEUbkR8zI033siKFSs4e/as2/5ly5bRv39/4uPjTaqsaYWGhhIUFGR2GSJiAoUbER8zYcIETpw4wbp161z7ysvLefvtt/nZz35W5TF/+9vfGDp0KC1btiQsLIz+/fvz9ttvu7WxWCyUlJTwyiuvuLq/nGNnnONZ9uzZw+23305UVBQtW7bk/vvvp7S09JI1f//999x2223ExMQQHh7OkCFD+M9//uN6PT09nYEDBwJw5513ut5/6dKl1Z7zh2NunI4fP16nGgFefPFFOnfuTFhYGIMGDeLjjz+usl1ZWRmzZs0iOTkZq9VKQkICDz/8MGVlZRfUOH36dFasWEGPHj0ICwsjJSWFnTt3AvDCCy+QnJxMaGgoI0aM4MCBAxe814oVK+jfvz9hYWG0atWKn//85xw5cqRGn0fEVynciPiYjh07kpKSwhtvvOHa9/7771NQUMBPf/rTKo959tln6devH3PmzOHJJ58kKCiI2267zS1gvPbaa1itVq666ipee+01XnvtNX7961+7nef222+ntLSUtLQ0brzxRv7+97/zq1/96qL15ubmMnToUNauXcvUqVP5y1/+QmlpKTfffDMrV64EoHv37syZMweAX/3qV673HzZsWK2/P3WpEeCll17i17/+NfHx8Tz99NNceeWV3HzzzRw6dMitnd1u5+abb+Zvf/sbY8eO5bnnniM1NZX58+czfvz4C8778ccf89BDDzFp0iRmz57NN998w0033cTChQv5+9//ztSpU/nd735HRkYGv/zlL92OXbp0KbfffjuBgYGkpaUxZcoU3n33XX70ox+Rn59f6++NiM8wRMQnLFmyxACMrVu3Gv/4xz+MyMhI4/Tp04ZhGMZtt91mXH311YZhGEZiYqIxZswYt2Od7ZzKy8uNnj17Gtdcc43b/mbNmhmTJk264L1nzZplAMbNN9/stn/q1KkGYHz55ZeufYmJiW7neOCBBwzA+Pjjj137ioqKjKSkJKNjx46GzWYzDMMwtm7dagDGkiVLLnj/SZMmGYmJiW77AGPWrFl1qvGHysvLjdjYWKNv375GWVmZa/+LL75oAMbw4cNd+1577TUjICDA7fMYhmEsXrzYAIxPP/3UrUar1WpkZma69r3wwgsGYMTHxxuFhYWu/TNnzjQAV1tnTT179jTOnDnjardmzRoDMB5//PFqP4+Ir9OVGxEfdPvtt3PmzBnWrFlDUVERa9asqbZLCiAsLMy1ferUKQoKCrjqqqv4/PPPa/W+06ZNc3t+3333AfDee+9Ve8x7773HoEGD+NGPfuTaFxERwa9+9SsOHDjA119/XasaGqPGbdu2kZeXxz333ENISIhr/+TJk4mOjnZru2LFCrp37063bt04fvy463HNNdcA8NFHH7m1v/baa92msQ8ePBiAW2+9lcjIyAv2f//99241TZ06ldDQUFe7MWPG0K1bN7erbiL+xq/DzcaNGxk7dixt27bFYrHUaRbIW2+9Rd++fQkPDycxMZG5c+c2fKEitdS6dWtGjhzJsmXLePfdd7HZbPzkJz+ptv2aNWsYMmQIoaGhxMTE0Lp1axYtWkRBQUGt3rdLly5uzzt37kxAQECVY0WcDh48SNeuXS/Y3717d9frDamuNVZ1bHBwMJ06dXLbt2/fPnbv3k3r1q3dHpdddhkAeXl5bu07dOjg9twZlhISEqrcf+rUKbeaqvredevWrcG/byLexK+nEpSUlNCnTx9++ctfcsstt9T6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cjGue9x4xzRwULgRERGRi3GFG+8YTAwKNyIiInIxzqUXvOQGfqBwIyIiIhfjZUsvgMKNiIiIXIyXLb0ACjciIiJyMV629AIo3IiIiEh1yoqgosSxrXAjIiIiXq/43JpSIRFgjTC3llpQuBEREZGqOWdKedE0cFC4ERERkeq4ll7wnsHEoHAjIiIi1XF2S3nR0gugcCMiIiLVKdKVGxEREfElXrj0AijciIiISHW8cOkFULgRERGR6jjH3HjRPW5A4UZERESq45otpXAjIiIi3u5sOZw+4dhWt5SIiIh4vZJjjq8BQRAWY24ttaRwIyIiIhdydkk1i4UA74oL3lWtiIiINA3nauBedgM/ULgRERGRqnjp0gugcCMiIiJV8dKlF0DhRkRERKpS5J3TwEHhRkRERKriWnpB4UZERER8gTPceNk9bkDhRkRERKpSpCs3IiIi4isMQ91SIiIi4kPOnAJ7hWNb4UZERES8nnOmVFgMBIWYW0sdmBpu0tLSGDhwIJGRkcTGxpKamsrevXsvedyKFSvo1q0boaGh9OrVi/fee68JqhUREfETXroauJOp4WbDhg1MmzaNzZs3s27dOioqKrj++uspKSmp9phNmzYxYcIE7rrrLr744gtSU1NJTU1l165dTVi5iIiID/PipRcALIZhGGYX4XTs2DFiY2PZsGEDw4YNq7LN+PHjKSkpYc2aNa59Q4YMoW/fvixevPiS71FYWEh0dDQFBQVERUU1WO0iIiI+45MF8OEs6P1TuOUFs6sBavf326PG3BQUFAAQE1P90uoZGRmMHDnSbd+oUaPIyMiosn1ZWRmFhYVuDxEREbkI10ypWHPrqCOPCTd2u50HHniAK6+8kp49e1bbLicnh7g498tkcXFx5OTkVNk+LS2N6Oho1yMhIaFB6xYREfE5zgHFXngDP/CgcDNt2jR27drFm2++2aDnnTlzJgUFBa7HoUOHGvT8IiIiPse5aKaXDigOMrsAgOnTp7NmzRo2btxI+/btL9o2Pj6e3Nxct325ubnEx1edLq1WK1artcFqFRER8XmaLVV3hmEwffp0Vq5cyf/+9z+SkpIueUxKSgrr169327du3TpSUlIaq0wRERH/UuS960qByVdupk2bxrJly1i9ejWRkZGucTPR0dGEhYUBMHHiRNq1a0daWhoA999/P8OHD2fevHmMGTOGN998k23btvHiiy+a9jlERER8RnkJlBc5tnXlpvYWLVpEQUEBI0aMoE2bNq7H8uXLXW2ysrLIzs52PR86dCjLli3jxRdfpE+fPrz99tusWrXqooOQRUREpIacM6WCw8EaaW4tdWTqlZua3GInPT39gn233XYbt912WyNUJCIi4ueKKk0Dt1jMraWOPGa2lIiIiHgA12Bi7xxvAwo3IiIiUplzGriXLr0ACjciIiJSWZF3TwMHhRsRERGpzLX0gsKNiIiI+IJi777HDSjciIiISGWu2VIKNyIiIuILXLOlvHNFcFC4ERERESfbWSg57thWt5SIiIh4vZJjgAGWQAhvaXY1daZwIyIiIg7OLqlmrSEg0Nxa6qHW4WbSpEls3LixMWoRERERM7lWA/feaeBQh3BTUFDAyJEj6dKlC08++SRHjhxpjLpERESkqRV7/0wpqEO4WbVqFUeOHOHee+9l+fLldOzYkdGjR/P2229TUVHRGDWKiIhIUyiutGimF6vTmJvWrVszY8YMvvzyS7Zs2UJycjK/+MUvaNu2LQ8++CD79u1r6DpFRESksTmXXvDimVJQzwHF2dnZrFu3jnXr1hEYGMiNN97Izp076dGjB/Pnz2+oGkVERKQp+MDSC1CHcFNRUcE777zDTTfdRGJiIitWrOCBBx7g6NGjvPLKK3z44Ye89dZbzJkzpzHqFRERkcbiA0svAATV9oA2bdpgt9uZMGECn332GX379r2gzdVXX03z5s0boDwRERFpMkW+ceWm1uFm/vz53HbbbYSGhlbbpnnz5mRmZtarMBEREWlChlFp6QU/Cze/+MUvGqMOERERMVNpPtjKHdteHm50h2IRERE53yUVGg3B1ffOeAOFGxEREanUJeXdg4lB4UZERETAZ5ZeAIUbERERAZ9ZegEUbkRERAR8ZukFULgRERER8JmlF0DhRkREREDdUiIiIuJj1C0lIiIiPqXIN9aVAoUbERERqTgDZQWObS+/OzEo3IiIiIizSyoo1HGHYi+ncCMiIuLviiqNt7FYzK2lASjciIiI+DsfWnoBFG5ERESkOM/x1QeWXgCFGxEREXHewM8HBhODwo2IiIioW0pERER8irqlGs7GjRsZO3Ysbdu2xWKxsGrVqou2T09Px2KxXPDIyclpmoJFRER8kbqlGk5JSQl9+vRh4cKFtTpu7969ZGdn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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "simulator = pps.Simulator.simple(3, protocol, spu.FieldType.FM128)\n",
    "spu_exp = pps.sim_jax(simulator, jnp.exp)\n",
    "\n",
    "x = np.arange(0.0, 23.0)\n",
    "spu_y = spu_exp(x)\n",
    "jax_y = jnp.exp(x)\n",
    "plt.title(\"Matplotlib demo\")\n",
    "plt.plot(x, spu_y, label=\"SPU\")\n",
    "plt.plot(x, jax_y, label=\"JAX\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dff64df6-0586-414e-96ea-1e35cdec0e29",
   "metadata": {},
   "source": [
    "As we can see, the SPU version of `exp` (blue line) diverges with the standard version when input is larger. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c0e7ae9-72c3-43af-adb4-b273b16883ec",
   "metadata": {},
   "source": [
    "Finally, SPU, as a secure computation, behaves very differently from CPU, both in accuracy and cost model, when you are not sure about how it works, simulate on it! "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  },
  "vscode": {
   "interpreter": {
    "hash": "830c23f57e6253683b92f2449db82410e6451d1b59048f91eefc53b20217e543"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
